//
// Created by yearing on 2021/6/18.
//

#include "iostream"

using namespace std;

class Shape{
public:
    enum ShapeColor {Red,Green,Blue};
    virtual void draw(ShapeColor color = Red) const
    {
        cout<<"shape-> color:"<< color<<endl;
    }
};
class Rectangle : public Shape {
public:
    virtual void draw(ShapeColor color = Green) const
    {
        cout<<"Rectangle-> color:"<< color<<endl;
    }
};
class Circle : public Shape {
public:
    virtual void draw(ShapeColor color) const
    {
        cout<<"Circle-> color:"<< color<<endl;
    }
};

int main()
{
    Rectangle r;
    Circle c;
    r.draw(); // 调用 Rectangle::draw ，静态类型为 Rectangle ，所以缺省参数为 Shape::Green
   // c.draw(); // 调用 Circle::draw ，静态类型为 Circle ，没有缺省参数，因此错误，必须显式    指定！
    Shape *pr = &r;
    Shape *pc = &c;
    // 以下为容易引起困惑的地方，函数与参数不一致
    pr->draw(); // 调用 Rectangle::draw ，但是静态类型为 Shape ，所以缺省参数 Shape::Red
    pc->draw(); // 调用 Shape::draw ，但是静态类型为 Shape ，所以缺省参数 Shape::Red
    return 0 ;
}
